// 封装axios工具类
import axios from "axios";
import { Message, Messsage } from "element-ui";
import router from "../router";

// 请求拦截器
axios.interceptors.request.use(
    (config) => {
        // 判断是否存在token，如果存在这个token，那么请求携带这个token
        if (window.sessionStorage.getItem("token")) {
            // 将token添加到请求头中
            config.headers["Authorization"] = window.sessionStorage.getItem(
                "token"
            );
        }
        return config;
    },
    (error) => {
        console.log(error);
    }
);

// 响应拦截器
axios.interceptors.response.use(
    // 调用接口成功
    (success) => {
        // 业务逻辑错误
        if (success.status && success.status === 200) {
            // 业务逻辑错误
            if (
                success.data.code === 500 ||
                success.data.code === 401 ||
                success.data.code === 403
            ) {
                Message.error({ message: success.data.message });
                return;
            }
            // 成功返回信息
            if (success.data.message) {
                Message.success({ message: success.data.message });
            }
        }
        return success.data;
    },
    (error) => {
        // 调用接口失败
        if (error.response.code === 504 || error.response.code === 404) {
            Message.error({ message: "服务器被吃了/(ㄒoㄒ)/~~" });
        } else if (error.res.code === 403) {
            Message.error({ message: "权限不足，请联系管理员！" });
        } else if (error.response.code === 401) {
            Message.error({ message: "尚未登录，请登录~~~" });
            router.replace("/");
        } else {
            if (error.response.data.message) {
                Message.error({ message: error.response.data.message });
            } else {
                Message.error({ message: "未知错误！" });
            }
        }
        return;
    }
);

// 请求前置路径
let base = "";

// 传送json格式的get请求封装
export const getRequest = (url, params) => {
    return axios({
        url: `${base}${url}`,
        method: "get",
        data: params,
    });
};

// 传送json格式的post请求封装
export const postRequest = (url, params) => {
    return axios({
        url: `${base}${url}`, // 数据
        method: "post", // 请求方式
        data: params, // 数据
    });
};

// 传送json格式的put请求封装
export const putRequest = (url, params) => {
    return axios({
        url: `${base}${url}`, // 数据
        method: "put", // 请求方式
        data: params, // 数据
    });
};

// 传送json格式的delete请求封装
export const deleteRequest = (url, params) => {
    return axios({
        url: `${base}${url}`, // 数据
        method: "delete", // 请求方式
        data: params, // 数据
    });
};
